#ifndef DIALOGCHATSERVER_H
#define DIALOGCHATSERVER_H

#include "components/CommonFunc.h"
#include "components/GlobalComponents.h"
#include "components/netServer/netComponents.h"

// [单例模式]聊天室服务端
class gChatServer : public QDialog
{
    Q_OBJECT
public:
    // 单例对象
    static gChatServer &Instance();

    virtual ~gChatServer() {}

    // 初始化界面
    void init();
    // 释放资源
    void release();

private:
    // 释放资源
    //void release();
    // 初始化界面控件
    void newToolFunc();
    // 主控件设置默认配置
    void setDefault();
    // 从网络模块中获取交互消息用于上层展示
    void threadCallBackMsg();

private slots:
    // 启动服务
    void slt_StartServer();
    // 取消服务
    void slt_StopServer();
    // 查看后台聊天内容
    void slt_ShowChatMsg();
    // 展示数据
    void slt_ShowMsgInfo(QString strInfo, QString strMsg);
    // 更新节点状态
    void stl_UpdateNodeStatus(QList<NODE_INFO> listNodeStatus);

signals:
    // 消息线程异步消息信号触发到界面展示
    void sengMsg2Show(QString strInfo, QString strMsg);
    // 发送上线或掉线好友列表
    void sendListNodeStatus(QList<NODE_INFO> listNodeStatus);

private:
    QGroupBox*      m_pBoxMySetInfo;    // 参数设置窗口
    QGroupBox*      m_pBoxOperation;    // 操作窗口
    QGroupBox*      m_pBoxFriendsInfo;  // 群友信息展示窗口
    QTextBrowser*   m_pMsgBrowser;      // 实时信息展示
    bool            m_bMsgBrowserStatus;// 信息窗口展示状态
    uint            m_iDialogWidth;

    QLineEdit*      m_pServerIP;        // 本机地址
    QLineEdit*      m_pServerPort;      // 本机端口
    QLineEdit*      m_pServerKey;       // 群组关键词
    QLineEdit*      m_pServerNumber;    // 群组限额

    nodeServer*     m_pNodeServer;      // 服务端处理对象

    bool            m_bExit;            // 线程退出信号
    std::thread     m_thCallBackMsg;    // 获取数据线程
};

#endif // DIALOGCHATSERVER_H
